package net.linku.constant;

/**
 * 通用常量类，用于存放系统中的常量值。
 */
public class Constants {

    // 字符集常量
    /**
     * UTF-8 字符集
     */
    public static final String UTF8 = "UTF-8";
    /**
     * GBK 字符集
     */
    public static final String GBK = "GBK";

    // HTTP 请求常量
    /**
     * http请求
     */
    public static final String HTTP = "http://";
    /**
     * https请求
     */
    public static final String HTTPS = "https://";

    // 通用状态码
    /**
     * 成功标记
     */
    public static final Integer SUCCESS = 200;
    /**
     * 失败标记
     */
    public static final Integer FAIL = 500;

    // 验证码相关常量
    /**
     * 验证码 redis key
     */
    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
    /**
     * 验证码有效期（分钟）
     */
    public static final long CAPTCHA_EXPIRATION = 2;

    // 启用/禁用状态常量
    /**
     * 未启用常量
     */
    public static final String ZERO = "0";
    /**
     * 启用常量
     */
    public static final String ONE = "1";

    // 尝试次数相关常量
    /**
     * 最大尝试次数
     */
    public static final int MAX_ATTEMPTS = 5;
    /**
     * 尝试分钟数
     */
    public static final int INITIAL_LOCK_DURATION_MINUTES = 5;
    /**
     * 最长锁定时间
     */
    public static final int MAX_LOCK_DURATION_MINUTES = 60;

    // 短信发送状态常量
    /**
     * 短信发送状态_已发送
     */
    public static final String SMS_STATUS_SENT = "SENT";
    /**
     * 短信发送状态_待发送
     */
    public static final String SMS_STATUS_PENDING = "PENDING";
    /**
     * 短信发送状态_发送失败
     */
    public static final String SMS_STATUS_FAILED = "FAILED";

    // 注册标志常量
    /**
     * 注册标志——自行注册
     */
    public static final String REGISTER_BYSELF = "B";
    /**
     * 注册标志——平台注册
     */
    public static final String REGISTER_BYPALTFORM = "P";
    /**
     * 注册标志——媒婆帮忙注册
     */
    public static final String REGISTER_BYPLAT = "C";
    /**
     * 注册标志——别人帮忙注册
     */
    public static final String REGISTER_BYOTHER = "O";

    // 查询值集常量
    /**
     * BMI_CATEGORY BMI类别，查询值集
     */
    public static final String BMI_CATEGORY = "BMI_CATEGORY";
    /**
     * GENDER_TYPE 性别类别，查询值集
     */
    public static final String GENDER_TYPE = "GENDER_TYPE";

    // 文件大小常量
    /**
     * 最大文件大小（字节）
     */
    public static final Long MAX_FILE_SIZE = 5 * 1024 * 1024L;
    /**
     * 最小文件大小（字节）
     */
    public static final Integer MIN_FILE_SIZE = 0;

    // 日期格式常量
    /**
     * 标准日期格式
     */
    public static final String DATE_FORMAT = "yyyy-MM-dd";
    /**
     * 标准时间格式
     */
    public static final String TIME_FORMAT = "HH:mm:ss";
    /**
     * 标准日期时间格式
     */
    public static final String DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";

    // 文件类型常量
    /**
     * PDF 文件类型
     */
    public static final String FILE_TYPE_PDF = "application/pdf";
    /**
     * JPEG 文件类型
     */
    public static final String FILE_TYPE_JPEG = "image/jpeg";
    /**
     * PNG 文件类型
     */
    public static final String FILE_TYPE_PNG = "image/png";
    /**
     * TXT 文件类型
     */
    public static final String FILE_TYPE_TXT = "text/plain";

    // 布尔状态常量
    /**
     * 表示“是”的常量
     */
    public static final String YES = "Y";
    /**
     * 表示“否”的常量
     */
    public static final String NO = "N";

    /**
     * Group name for Dubbo providers.
     */
    public static final String PROVIDER_GROUP = "provider";

    /**
     * Group name for Dubbo consumers.
     */
    public static final String CONSUMER_GROUP = "consumer";

    // 授权的常量
    /**
     * 密码授权
     */
    public static final String GRANT_TYPE_PASSWORD = "password";

    /**
     * 后台管理人员
     */
    public static final String ADMIN_TYPE = "admin_type";

    /**
     * 普通的用户
     */
    public static final String MEMBER_TYPE = "member_type";

    /**
     * app的用户
     */
    public static final String PORTAL_TYPE = "portal_type";

    /**
     * 后台管理员常量
     */
    public static final String ROLE_ADMIN = "ROLE_ADMIN";

    /**
     * 未知用户
     */
    public static final String UN_KNOW_USER = "UN_KNOW_USER";
}
